//详情查看：https://docs.taro.zone/docs/config-detail
import Components from 'unplugin-vue-components/webpack';
import NutUIResolver from '@nutui/auto-import-resolver';
import path from "path";

const config = {
    // 项目名称
    projectName: 'taro-wxapp',
    // 项目创建日期
    date: '2024-4-10',
    // 设计稿尺寸
    designWidth(input) {
        if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) {
            return 375
        }
        return 750
    },
    // 设计稿尺寸换算规则
    deviceRatio: {
        640: 2.34 / 2,
        750: 1,
        828: 1.81 / 2,
        375: 2 / 1
    },
    //Webpack 的别名配置，将 @ 指向 src 目录
    alias: {
        '@': path.resolve(__dirname, '..', 'src')
    },
    // 项目源码目录
    sourceRoot: 'src',
    // 项目产出目录
    outputRoot: 'dist',
    // Taro 插件配置
    plugins: ['@tarojs/plugin-html', 'taro-plugin-pinia'],
    // 全局变量设置
    defineConstants: {},
    // 文件 copy 配置
    copy: {
        patterns: [],
        options: {}
    },
    // 框架，react，nerv，vue, vue3 等
    framework: 'vue3',
    //编译器配置，包括类型和预打包选项
    compiler: {
        type: 'webpack5',
        prebundle: {enable: false}
    },
    //Sass 相关配置，引入 NutUI 的变量文件
    sass: {
        data: `@import "@nutui/nutui-taro/dist/styles/variables.scss";`
    },
    // webpack5缓存配置详情：https://webpack.js.org/configuration/cache/#cache
    cache: {
        enable: true,
        // type: 'filesystem', // 使用文件系统缓存
        cacheDirectory: path.resolve(__dirname, '../.webpack-cache'), // 自定义缓存目录
        // // 可选：设置缓存版本
        version: 'v1', // 更新版本号以清除旧缓存
        // 可选：指定哈希算法
        hashAlgorithm: 'sha256', // 更改哈希算法
        // 可选：指定一组路径，这些路径下的文件被视为不可变，不会触发缓存失效
        immutablePaths: [
            path.resolve(__dirname, 'node_modules'),
            // 其他不可变路径...
        ],
    },
    // 针对小程序的配置，包括 Webpack 链和 PostCSS 配置
    mini: {
        // 自定义 Webpack 配置
        webpackChain(chain) {
            chain.plugin('unplugin-vue-components').use(Components({
                resolvers: [
                    NutUIResolver({
                        importStyle: 'sass',
                        taro: true
                    })
                ]
            }))
        },
        postcss: {
            pxtransform: {
                enable: true,
                config: {
                    // selectorBlackList: ['nut-']
                }
            },
            // 小程序端样式引用本地资源内联配置
            url: {
                enable: true,
                config: {
                    limit: 1024 // 设定转换尺寸上限
                }
            },
            cssModules: {
                enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
                config: {
                    namingPattern: 'module', // 转换模式，取值为 global/module
                    generateScopedName: '[name]__[local]___[hash:base64:5]'
                }
            }
        }
    },
    //针对 H5 的配置，包括 Webpack 链和 PostCSS 配置
    h5: {
        // 自定义 Webpack 配置
        webpackChain(chain) {
            chain.plugin('unplugin-vue-components').use(Components({
                resolvers: [
                    NutUIResolver({
                        importStyle: 'sass',
                        taro: true
                    })
                ]
            }))
        },
        publicPath: '/',
        staticDirectory: 'static',
        esnextModules: ['nutui-taro', 'icons-vue-taro'],
        postcss: {
            autoprefixer: {
                enable: true,
                config: {}
            },
            cssModules: {
                enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
                config: {
                    namingPattern: 'module', // 转换模式，取值为 global/module
                    generateScopedName: '[name]__[local]___[hash:base64:5]'
                }
            }
        }
    }
}

module.exports = function (merge) {
    if (process.env.NODE_ENV === 'development') {
        return merge({}, config, require('./dev'))
    }
    return merge({}, config, require('./prod'))
}
